package com.demo.boss.common.constants;

import com.demo.boss.common.constants.type.SysException;
import com.demo.boss.common.enums.SysCode;
import com.demo.boss.models.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;

/**
 * 定义全局异常处理
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    @ExceptionHandler({SysException.class})
    public Result handlerSysException(SysException ex){
        logger.error("SysException->{}",ex);
        return Result.fail(ex.getSysCode());
    }
    /**
     * 处理BeanValidation异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleArgumentNotValid(MethodArgumentNotValidException ex) {
        // 使用StringBuilder更高效（单线程场景）
        StringBuilder sb = new StringBuilder();
        // 遍历所有字段错误，拼接详细信息（修正格式）
        ex.getFieldErrors().forEach(fieldError ->
                sb.append("错误项：[").append(fieldError.getField())
                        .append("]，错误提示：").append(fieldError.getDefaultMessage()).append("；")
        );
        // 将详细错误信息放入Result的data或msg中，返回给前端
        return new Result(
                SysCode.REQUEST_PARAM_ERROR.getCode(),
                SysCode.REQUEST_PARAM_ERROR.getText(),
                sb.toString() // 传递具体错误信息
        );
    }
}
